namespace RivercrabNet
{
    using System;
    using System.Collections.Generic;

    public abstract class BaseIndicator
    {
        private Rivercrab crab;
        protected string[] fields;
        private string indDesc = string.Empty;
        private string indName = string.Empty;
        private List<IndicatorPeriod> indPeriod = new List<IndicatorPeriod>();
        private IndicatorType indType;
        private Dictionary<string, string> sourceDic = new Dictionary<string, string>();

        protected BaseIndicator()
        {
        }

        public abstract bool Contains(object obj);
        public abstract double[] Get(int r);
        public abstract List<BaseShape> GetShapeList();
        public abstract void Remove();
        public abstract bool Set(int r, string target);
        public abstract void SetParam(string[] fields, string[] source, double[] periods, int panelID);

        public Rivercrab Crab
        {
            get
            {
                return this.crab;
            }
            set
            {
                this.crab = value;
            }
        }

        public string[] Fields
        {
            get
            {
                return this.fields;
            }
            set
            {
                this.fields = value;
            }
        }

        public string IndDesc
        {
            get
            {
                return this.indDesc;
            }
            set
            {
                this.indDesc = value;
            }
        }

        public string IndName
        {
            get
            {
                return this.indName;
            }
            set
            {
                this.indName = value;
            }
        }

        public List<IndicatorPeriod> IndPeriod
        {
            get
            {
                return this.indPeriod;
            }
            set
            {
                this.indPeriod = value;
            }
        }

        public IndicatorType IndType
        {
            get
            {
                return this.indType;
            }
            set
            {
                this.indType = value;
            }
        }

        public Dictionary<string, string> SourceDic
        {
            get
            {
                return this.sourceDic;
            }
            set
            {
                this.sourceDic = value;
            }
        }
    }
}

